use std::env;
use agent::generic::ProviderConfig;
use autosite::to_markdown::MarkdownConfig;
use autosite::trans_site::{TranslationConfig, make_complete_site_translation_callbox};
use autosite::{TextSplitterConfig, TextType};
use automation::spider_utils::CrawlConfiguration;
use common::compose::make_empty_ctx;
use dotenvy::dotenv;
use trans::trans_provider::TargetLang;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化环境变量和日志
    dotenv().ok();
    env_logger::init();

    // 获取 API 密钥
    let api_key = env::var("OPENAI_API_KEY").expect("OPENAI_API_KEY 环境变量未设置");
    let openai_base_url = env::var("OPENAI_BASE_URL").ok();

    // 创建爬虫配置
    let spider_base_url = "https://cisco.github.io/ChezScheme/csug/".to_string();
    let crawl_config = Some(CrawlConfiguration {
        respect_robots_txt: false,
        subdomains: false,  // 不允许子域名
        tld: false,         // 不允许所有顶级域名
        delay: 100,          // 请求间延迟
        depth: 3,          // 设置深度为 3，可以爬取到22个页面
        page_limit: 200,   // 增加页面限制
        timeout: 120,      // 增加超时时间
        user_agent: Some("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36".to_string()), // 使用更真实的用户代理
        verbose: true,
        whitelist_url: Some(vec![spider_base_url.clone()]), // 只爬取base_url下的页面
        blacklist_url: None,
    });

    // 创建 Markdown 转换配置
    let markdown_config = MarkdownConfig {
        output_dir: "output/md".to_string(),
        html_to_md_provider_config: ProviderConfig::OpenAI {
            api_key: api_key.clone(),
            base_url: openai_base_url.clone(),
            temperature: 0.3,
            max_tokens: None,
        },
        html_to_md_model: "gpt-4o-mini".to_string(),
        text_splitter_config: TextSplitterConfig {
            text_type: TextType::Html,
            max_tokens: 10000,
        },
        parallel_num: 2,
    };

    // 创建翻译配置
    let translation_config = TranslationConfig {
        output_dir: "output/md".to_string(),
        translator_provider_config: ProviderConfig::OpenAI {
            api_key,
            base_url: openai_base_url,
            temperature: 0.3,
            max_tokens: None,
        },
        translator_model: "gpt-4o-mini".to_string(),
        target_lang: TargetLang::Zh,
        parallel_num: 2,
    };

    // 创建完整的网站翻译流程
    println!("开始完整的网站翻译流程...");
    let complete_callbox = make_complete_site_translation_callbox(
        spider_base_url,
        crawl_config,
        markdown_config,
        translation_config,
    );

    // 执行流程
    let translation_results = complete_callbox.run((), make_empty_ctx()).await?;
    println!("流程完成，共翻译 {} 个页面", translation_results.len());

    // 输出结果
    for result in &translation_results {
        println!("URL: {}", result.url);
        println!("源语言: {}", result.source_lang);
        println!("目标语言: {}", result.target_lang);
        if let Some(path) = &result.output_path {
            println!("输出文件: {}", path.display());
        }
        println!("内容长度: {} 字节", result.content.len());
        println!("---");
    }

    Ok(())
}
